//
//  LBReactBridge.h
//  LBReact
//
//  Created by WuShiHai on 19/5/24.
//  Copyright (c) 2019 Lebbay. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>

typedef NS_ENUM(NSUInteger, LBBridgeUsedState) {
    LBBridgeUsedStateInit          = 0 ,   //刚初始化
    LBBridgeUsedStateFree          = 1 ,   //已经初始化完毕，待空闲
    LBBridgeUsedStateWillIn        = 2 ,   //将要使用
    LBBridgeUsedStateIn            = 3 ,   //使用中
    LBBridgeUsedStateDirty         = 4 ,   //待释放
};

@interface LBBridgeModuleInfo : NSObject

/**
 模块名称
 */
@property (nonatomic, strong) NSString *name;

/**
 module存放的文件夹路径
 */
@property (nonatomic, strong) NSString *folderPath;

/**
 模块版本号，即bunldId
 */
@property (nonatomic, assign) NSUInteger index;

@end

@interface LBBridge : RCTBridge

/**
 bridge的使用状态
 */
@property (nonatomic, assign) LBBridgeUsedState state;

/**
 被controller所使用的个数
 */
@property (nonatomic, assign) NSUInteger usedCount;

/**
 该bridge包含的模块所对应的版本号m，如果未包含，则值为-1

 @param module 模块d名称
 @return 是或否
 */
- (NSInteger)indexForModule:(NSString *)module;

- (NSURL *)URLForAsset:(NSURL *)mainFolderURL;

/**
 该bridge是否包含该路径

 @param compnent 路径
 @return 是或否
 */
- (BOOL)isContainCompnent:(NSString *)compnent;

/**
 添加模块

 @param module 模块名称
 @param module 模块版本号
 */
- (void)addModule:(NSString *)module
            index:(NSUInteger)index;

/**
 添加模块
 
 @param moduleInfo 模块信息
 */
- (void)addModule:(LBBridgeModuleInfo *)moduleInfo;

/**
 添加路径

 @param compnent 路径
 */
- (void)addCompnent:(NSString *)compnent;

/**
 增加使用次数
 */
- (void)increase;

/**
 减少使用次数
 */
- (void)decrease;

@end
